#include <iostream>
#include <string>

#include "../Comm/httplib.h"
#include "Compiler_Run.hpp"

using namespace ns_compiler_run;
using namespace httplib;

void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}

//把编译并运行功能形成网络服务
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }
    httplib::Server svr;

    svr.Post("/compiler_run", [](const httplib::Request &req, httplib::Response &rsp)
        {
            //获取正文，也就是用户提交的代码
            std::string in_json = req.body;
            std::string out_json;
            if(!in_json.empty())
            {
                CompileAndRun::Start(in_json, &out_json);
                //设置HTTP响应的主体内容和类型
                rsp.set_content(out_json, "application/json;charset=utf-8");
            } 
        });

        svr.listen("0.0.0.0", atoi(argv[1]));

    // 测试
    //  httplib::Server svr;

    // svr.Get("/hi", [](const httplib::Request &req, httplib::Response &rsp)
    //         { rsp.set_content("你好,世界!", "text/plain; charset=utf-8"); });

    // svr.listen("0.0.0.0", 8080);
    // return 0;

    // //测试代码
    // std::string in_json;
    // Json::Value in_value;
    // // R"()", raw string
    // in_value["code"] = R"(#include<iostream>
    //     int main(){
    //         std::cout << "hihihi" << std::endl;
    //         return 0;
    //     })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240 * 3;
    // Json::FastWriter writer;
    // in_json = writer.write(in_value);
    // std::cout << in_json << std::endl;
    // // 这个是将来给客户端返回的json串
    // std::string out_json;
    // CompileAndRun::Start(in_json, &out_json);

    // std::cout << out_json << std::endl;

    return 0;
}